package rohyunji;

public class J22_privateConstructor {

	public static void main(String[] args) {
//		일반적으로 생성자는 public이어야하지만 클래스에 대한 객체를 생성하려면
//		반드시 필요한것이 생성자라 그러하다.
//		어떤생성자는 객체를 못만들게 하는 private 생성자 를  만들기도 한다.
//		singleton클래스라 한다.
	
//		Singleton c=new Singleton();
//		Singleton c1=new Singleton();
//		Singleton one= Singleton.newInstance();
		
		Singleton one= Singleton.newInstance();
		Singleton two= Singleton.newInstance();
		
	}//end of main

}

class Singleton
{
	private static Singleton object=null;
//	object static으로 선언되어 있기 때문에 단 하나의 객체 생성 가능 
//	public Singleton() 
//	{
//		System.out.println("객체생성");
//	}
	private Singleton() 
	{
		System.out.println("객체생성");
	}
//	public static Singleton newInstance() 
//	{
//		Singleton object=new Singleton();
//		return object;
//	}
// 	생성자 메서드는 일반메서드를 통해서만 호출 
//	하나의 생성자만 호출되게 하기위한 메소드(순환)
	public static Singleton newInstance() //경우 많음.
	{
		
		if (object==null) //객체를 생성하기 전이라 위가 static으로 선언되어야함
			object=new Singleton();
		return object;
	}
	
	
}
